﻿//***********************************************************************************
// 文件名称：TestActivity
// 功能描述：测试活动类
// 数据表：
// 作者：liuxiaohu
// 日期：2017/3/13 9:11:30
// 修改记录：
//***********************************************************************************

namespace GameServer
{
    /// <summary>
    /// 测试活动
    /// </summary>
    public class TestActivity
    {
        #region 变量

        /// <summary>
        /// 开启周期
        /// </summary>
        private TimePeriod openTimePeriod;

        /// <summary>
        /// 生存周期
        /// </summary>
        private TimePeriod lifeTimePeriod;

        /// <summary>
        /// 活动状态，默认为未开始
        /// </summary>
        private ActivityState activityState = ActivityState.UnBegin;

        #endregion

        #region 方法

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="openTimePeriod">活动开启周期</param>
        /// <param name="lifeTimePeriod">活动生存周期</param>
        public TestActivity(TimePeriod openTimePeriod, TimePeriod lifeTimePeriod)
        {
            this.openTimePeriod = openTimePeriod;
            this.lifeTimePeriod = lifeTimePeriod;
        }

        /// <summary>
        /// 刷新函数
        /// </summary>
        private void Update()
        {
            if (this.activityState == ActivityState.Finished)
            {
                return;
            }

            if (this.activityState == ActivityState.UnBegin && lifeTimePeriod.IsOpen(Global.GlobalTime))
            {
                // 生命周期开始
                Begin();
            }
            if ((this.activityState == ActivityState.Begin || this.activityState == ActivityState.Closed) && openTimePeriod.IsOpen(Global.GlobalTime))
            {
                // 活动开启
                Open();
            }
            if (this.activityState == ActivityState.Opened && openTimePeriod.IsClose(Global.GlobalTime))
            {
                // 活动关闭
                Close();
            }
            if (lifeTimePeriod.IsClose(Global.GlobalTime))
            {
                // 活动结束
                Finish();
            }
        }

        /// <summary>
        /// 每秒执行的函数
        /// </summary>
        public void GameSecLoop()
        {
            Update();
            // todo:各种操作(如消息处理,判断跨分、时、天等)
        }

        /// <summary>
        /// 活动生命周期开始时执行
        /// </summary>
        public void Begin()
        {
            this.activityState = ActivityState.Begin;
            
            // 日志记录
            LOG.Write("TestActivity-Begin");
            // todo:活动生命周期开始时进行的操作
        }

        /// <summary>
        /// 活动开启时执行
        /// </summary>
        public void Open()
        {
            this.activityState = ActivityState.Opened;

            // 日志记录
            LOG.Write("TestActivity-Open");

            // todo:活动开启时进行的操作
        }

        /// <summary>
        /// 活动关闭
        /// </summary>
        public void Close()
        {
            this.activityState = ActivityState.Closed;

            // 日志记录
            LOG.Write("TestActivity-Close");

            // 活动关闭时发奖
            Global.RankMgr.GetReward();

            // todo: 活动结束时进行的操作
        }

        /// <summary>
        /// 活动生命周期结束时执行
        /// </summary>
        public void Finish()
        {
            this.activityState = ActivityState.Finished;

            // 日志记录
            LOG.Write("TestActivity-Finish");

            // todo:活动生命周期结束时进行的操作
        }

        #endregion
    }
}
